package core.logic.dataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import core.logic.services.utilServices.ConnectionService;
import core.models.domainModel.Parameter;

//Pieter Gielen C1025696

public class ParameterDAO {
	
	//haal lijst met parameters op
	
	public static ArrayList<Parameter> getAllBasic(){
		ArrayList<Parameter> lijst = new ArrayList<Parameter>();
		String sql = "SELECT * FROM Param";
		try{		
			PreparedStatement prep= ConnectionService.getConnection().prepareStatement(sql);
			ResultSet rs = prep.executeQuery();
			
			while(rs.next()){
				
				Parameter Pr = new Parameter(rs.getString("ParameterType"),
						rs.getString("ParameterDetail"), 
						rs.getString("Omschrijving"), 
						rs.getDouble("WaardeNummeriek"), 
						rs.getString("WaardeTekst"));
					
				lijst.add(Pr);
			}
			
		}
		catch(SQLException ex){
			ex.printStackTrace();
		}
		return lijst;
	}
	
	
	public static boolean InsertParameter(Parameter aParam)
	{
		String ParameterType;
		String ParameterDetail;
		String Omschrijving;
		Double WaardeNummeriek;
		String WaardeTekst;
		String sql = "";
		int result;
		
		ParameterType= aParam.getParameterType().toString();
		ParameterDetail= aParam.getParameterDetail().toString();
		Omschrijving= aParam.getOmschrijving().toString();
		WaardeNummeriek= aParam.getWaardeNummeriek();
		WaardeTekst= aParam.getWaardeTekst().toString();
		
		sql = "Insert into Param(ParameterType, ParameterDetail, Omschrijving, WaardeNummeriek, WaardeTekst) Values (?,?,?,?,?)";
		
		try
		{
			Connection con = ConnectionService.getConnection();
			PreparedStatement pst = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			pst.setString(1, ParameterType);
			pst.setString(2, ParameterDetail);
			pst.setString(3, Omschrijving);
			pst.setDouble(4, WaardeNummeriek);
			pst.setString(5, WaardeTekst);
			result = pst.executeUpdate();
			
			
			if (result == 1)
			{
				return true;
			}
			else
			{
				return false;
			}
			
		}
		catch(SQLException ex)
		{
			ex.printStackTrace();
			return false;
		}
		
	}
	
	public static ArrayList<Parameter> SearchParameter(Parameter Param)
	{
		ArrayList<Parameter> lvlpParam= new ArrayList<Parameter>();
		String ParameterType= Param.getParameterType();
		String ParameterDetail = Param.getParameterDetail();
		String Omschrijving=Param.getOmschrijving();
		Double WaardeNummeriek=Param.getWaardeNummeriek();
		String WaardeTekst= Param.getWaardeTekst();
		
		try {
		String WelkZoekveld = "";
		String sql ="SELECT * from Param WHERE ";
		PreparedStatement statement = null;		
				
//		if (ParameterType != "")
//		{
//			if(ParameterDetail !="")
//			{
//				if (WaardeNummeriek!=0.0)
//				{
//					WelkZoekveld= "WaardeNummeriek";
//					sql+="WaardeNummeriek = ?";
//					statement.setDouble(1, WaardeNummeriek);
//					if(Omschrijving!= "")
//					{
//						WelkZoekveld= "Omschrijving";
//						sql+="Omschrijving = ?";
//						statement.setString(1, Omschrijving);
//					}
//					else if(WaardeTekst!="")
//					{
//						WelkZoekveld= "WaardeTekst";
//						sql+="WaardeTekst = ?";
//						statement.setString(1, WaardeTekst);
//					}
//				}
//				
//				WelkZoekveld= "ParameterDetail";
//				sql+="ParameterDetail = ?";
//				statement.setString(1, ParameterDetail);
//			}
//			WelkZoekveld= "ParameterType";
//			sql+="ParameterType = ?";
//			statement.setString(1, ParameterType);
//		}
//		
		if (ParameterType != "")
		{
			
			WelkZoekveld= "ParameterType";
		    sql+="ParameterType = ?";
		    statement = ConnectionService.getConnection().prepareStatement(sql);	
		    statement.setString(1, ParameterType);
		}
		else if(ParameterDetail !="")
		{
			WelkZoekveld= "ParameterDetail";
			sql+="ParameterDetail = ?";
			statement = ConnectionService.getConnection().prepareStatement(sql);	
			statement.setString(1, ParameterDetail);
		}
		else if (Omschrijving!="")
		{
			WelkZoekveld= "Omschrijving";
			sql+="Omschrijving = ?";
			statement = ConnectionService.getConnection().prepareStatement(sql);	
			statement.setString(1, Omschrijving);
		}
		else if (WaardeNummeriek!=0.0)
		{
			WelkZoekveld= "WaardeNummeriek";
			sql+="WaardeNummeriek = ?";
			statement = ConnectionService.getConnection().prepareStatement(sql);	
			statement.setDouble(1, WaardeNummeriek);
		}
		else if(WaardeTekst!="")
		{
			WelkZoekveld= "WaardeTekst";
			sql+="WaardeTekst = ?";
			statement = ConnectionService.getConnection().prepareStatement(sql);	
			statement.setString(1, WaardeTekst);
		}
		else
		{
			sql ="SELECT * from Param";
			statement = ConnectionService.getConnection().prepareStatement(sql);
		}
		
		/*
		[ParameterType] [nvarchar](50) NOT NULL,
		[ParameterDetail] [nvarchar](50) NOT NULL,
		[Omschrijving] [varchar](150) NULL,
		[WaardeNummeriek] [decimal](18, 0) NULL,
		[WaardeTekst] [varchar](150) NULL,
		 */
			
			ResultSet resultSet = statement.executeQuery();
			while(resultSet.next()) {
				Parameter nieuweParameter = new Parameter(
						resultSet.getString("ParameterType"),
						resultSet.getString("ParameterDetail"),
						resultSet.getString("Omschrijving"),
						resultSet.getDouble("WaardeNummeriek"),
						resultSet.getString("WaardeTekst")
						);
				lvlpParam.add(nieuweParameter);
			}
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
		
		
		
		return lvlpParam;
	}
	
	//Gebruikt voor het ophalen van de landcodes om in de list te steken in scherm toevoegen personeel
	//Lieven Drijkoningen
	public static ArrayList<String> getMogelijkeLandcodes(String type)
	{
		ArrayList<String> l = new ArrayList<String>();
		String sql = "SELECT ParameterDetail FROM Param WHERE ParameterType = ?";
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setString(1, type);
			ResultSet rs = pst.executeQuery();
			while(rs.next())
			{
				l.add(rs.getString("ParameterDetail"));
			}
		}
		catch (SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
		return l;
	}
	
	//Pieter Gielen
	//opvullen van vliegtuig toevoegen scherm met aantallen van de parameters 
	public static ArrayList<Integer> getAantallenVoorToevoegenVliegtuig(String type)
	{
		ArrayList<Integer> l = new ArrayList<Integer>();
		String sql = "SELECT ParameterDetail FROM Param WHERE ParameterType = ?";
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setString(1, type);
			ResultSet rs = pst.executeQuery();
			while(rs.next())
			{
				l.add(rs.getInt("ParameterDetail"));
				//l.add(rs.getDouble("ParameterDetail"));
			}
		}
		catch (SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
		return l;
	}
	
	
	//Leen Van Pelt
	public static Parameter getParameterByTypeAndDetail(String type, String detail)
	{
		//getParameterByParameterID gaat niet want er is geen parameterID
		Parameter dezeParameter = new Parameter();
		String sql = "SELECT * FROM Param WHERE ParameterType = ? AND ParameterDetail = ?";
		
		try 
		{
			PreparedStatement statement = ConnectionService.getConnection().prepareStatement(sql);
			statement.setString(1, type);
			statement.setString(2, detail);
			
			ResultSet resultSet = statement.executeQuery();
			
			if (resultSet.next())
			{
				// new Parameter(type, parameterDetail, omschrijving, waardeNummeriek, waardeTekst)
				dezeParameter = new Parameter(
									resultSet.getString("ParameterType"),
									resultSet.getString("ParameterDetail"),
									resultSet.getString("Omschrijving"),
									resultSet.getDouble("WaardeNummeriek"),
									resultSet.getString("WaardeTekst"));
			}
			return dezeParameter;
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}

		return dezeParameter;
	}
	
	//Leen Van Pelt
	public static Boolean updateParameter(Parameter nieuweParameter, Parameter oudeParameter)
	{
		
		String sql = 	"UPDATE Param "
				+ 		"SET ParameterType = ?, "
				+		"ParameterDetail = ?, "
				+		"Omschrijving = ?, "
				+		"WaardeNummeriek = ?, "
				+		"WaardeTekst = ? "
				
				+		"WHERE ParameterType = ? AND "
				+		"ParameterDetail = ? AND "
				+		"Omschrijving = ? AND "
				+		"WaardeNummeriek = ? AND "
				+		"WaardeTekst = ? ";
		int result = 0;
		
		try 
		{
			PreparedStatement statement = ConnectionService.getConnection().prepareStatement(sql);
			statement.setString(1, nieuweParameter.getParameterType());
			statement.setString(2, nieuweParameter.getParameterDetail());
			statement.setString(3, nieuweParameter.getOmschrijving());
			statement.setDouble(4, nieuweParameter.getWaardeNummeriek());
			statement.setString(5, nieuweParameter.getWaardeTekst());
			
			statement.setString(6, oudeParameter.getParameterType());
			statement.setString(7, oudeParameter.getParameterDetail());
			statement.setString(8, oudeParameter.getOmschrijving());
			statement.setDouble(9, oudeParameter.getWaardeNummeriek());
			statement.setString(10, oudeParameter.getWaardeTekst());
			
			result = statement.executeUpdate();
			
			if (result == 1)
			{
				return true;
			}
			else
			{
				return false;
			}
			
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
			return false;
		}
		
	}
	
	
}
